/**
 * @param {number[]} nums
 * @return {number[][]}
 */
 var permuteUnique = function(nums) {
     nums.sort((a,b)=>a-b)
    let res =[],curr=[],length=nums.length;
    
    function tools(used){
        if(curr.length==length){
            res.push([...curr])
            return 
        }
        for(let i=0;i<length;i++){
            if(i>0&&nums[i]==nums[i-1]&&!used[i-1]) continue
            //used[i]为true说明在同一树枝上nums[i-1]使用过 
            //used[i]为false说明在同一层上nums[i-1]使用过
            // 如果同一树层nums[i - 1]使用过则直接跳过
            if(!used[i]){
                curr.push(nums[i])
                used[i]=true
                tools(used)
                curr.pop()
                used[i]=false
            }
        }
    }
    tools([])
    return res
};

console.log(permuteUnique([1,1,2]));